﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
// using Lola.Persistencia;


namespace Lola.Entidades
{
    public class eServicio
    {
        private string codigo;
        private DateTime fechaSalida;
        private DateTime fechaLlegada;
        private string origen;
        private string destino; 
        private string estado;
    //   private string horarioSalidaGalpon;  VER SI VA EN LA db NO ESTA 
        private eServicioChofer schofer;
        private eMicro micro;
        private List<eIncidencia> incidencias;
        private List<eParteNovedades> parteNov;



        public eServicio(string cod, DateTime fechaS, DateTime fechaL, string orig, string des, string est, eMicro mi, List<eIncidencia> incidencias)
        {
            this.codigo = cod;
            this.fechaSalida = fechaS;
            this.fechaLlegada = fechaL;
            this.origen = orig;
            this.destino = des;
            this.estado = est;
         //   this.horarioSalidaGalpon = horarioS;
             this.micro = mi;
             this.schofer = new eServicioChofer();
             this.incidencias = incidencias;
        }

        
        public eServicio()
        {
           
            this.schofer=new eServicioChofer();
            this.micro=new eMicro();
            this.incidencias = new List<eIncidencia>();
         }

        public string Codigo
        {
            get { return codigo; }
            set { codigo = value; }
        }
        
        public DateTime FechaSalida
        {
            get { return fechaSalida; }
            set { fechaSalida = value; }
        }       

        public DateTime FechaLlegada
        {
            get { return fechaLlegada; }
            set { fechaLlegada = value; }
        }
       
        public string Origen
        {
            get { return origen; }
            set { origen = value; }
        }
       
        public string Destino
        {
            get { return destino; }
            set { destino = value; }
        }
       
        public string Estado
        {
            get { return estado; }
            set { estado = value; }
        }
        
        //public string HorarioSalidaGalpon
        //{
        //    get { return horarioSalidaGalpon; }
        //    set { horarioSalidaGalpon = value; }
        //}

        public bool existeMicroAsignado()
        {
            bool encontrado=true;
            if (this.micro == null)
                encontrado = false;
            return encontrado;
        }


        public eServicioChofer Schofer
        {
            get { return schofer; }
            set { schofer = value; }
        }

        public eMicro Micro
        {
            get { return micro; }
            set { micro = value; }
        }

        public List<eIncidencia> Incidencias
        {
            get { return incidencias; }
            set { incidencias = value; }
        }


        public List<eParteNovedades> ParteNov
        {
            get { return parteNov; }
            set { parteNov = value; }
        }

/*
        public eServicio obtenerServicio(string cod)
        {
            eMicro micro = new eMicro();
            eIncidencia inc=new eIncidencia();
            var serv = AdministradorPersistenciaServicio.getInstanciaServicio().buscarServicio(cod);
          

            eServicio servicio= new eServicio(serv.cod,
                                   serv.fechaSalidaSer,
                                   serv.fechaLlegadaSer,
                                   serv.origen, 
                                   serv.destino,
                                   serv.estado,micro.obtenerMicro(serv.numInt),
                                   inc.obtenerIncidencias(serv.cod)
                                   );
           
            return servicio;

        }

        public List<eServicio> obtenerTodosLosServicios()
        {
            eMicro micro = new eMicro();
            eIncidencia inc = new eIncidencia();
            List<eServicio> listaservicios = new List<eServicio>();
            var lista = AdministradorPersistenciaServicio.getInstanciaServicio().buscarTodosLosServicios();
            for (int i = 0; i < lista.Count(); i++)
            {
                eServicio servicio = new eServicio(lista.ElementAt(i).cod,
                                                 lista.ElementAt(i).fechaSalidaSer,
                                                 lista.ElementAt(i).fechaLlegadaSer,
                                                 lista.ElementAt(i).origen,
                                                 lista.ElementAt(i).destino,
                                                 lista.ElementAt(i).estado,
                                                 micro.obtenerMicro(lista.ElementAt(i).numInt),
                                                 inc.obtenerIncidencias(lista.ElementAt(i).cod));
                listaservicios.Add(servicio);

            }
            return listaservicios;
        }

        public bool sonChoferesAsignados(string cod,List<int> legajosingresados)
        {
          
            List<int> legajosregistrados = this.schofer.obtenerLegajosChoferesAsignados(cod);
            for (int i = 0; i < legajosingresados.Count; i++)
            {
                bool ret = false;
                for (int j = 0; (j < legajosregistrados.Count) & (ret==false); j++)
                {
                    if (legajosingresados.ElementAt(i) == legajosregistrados.ElementAt(j))
                        ret = true;
                }
                if (ret != true)
                    return false;
            }
            return true;
        }

        public void actualizarEstadoServicio(string estado,string cod)
        {
            this.estado = estado;
            AdministradorPersistenciaServicio.getInstanciaServicio().actualizarEstado(estado, cod);
        }

        public void altaDeIncidencia(string cod,int numeroInc, DateTime fechaInc,string gravedad,string descrip,int prioridad)
        {
            eIncidencia inc = new eIncidencia(cod, numeroInc, fechaInc, gravedad, descrip, prioridad);
            this.Incidencias.Add(inc);
            inc.altaDeIncidencia(cod, numeroInc, fechaInc, gravedad, descrip, prioridad);
        }

        public void bajaDeIncidencia(int numinc)
        {
            eIncidencia inc = this.buscarIncidencia(numinc);
            if (inc != null)
                this.Incidencias.Remove(inc);
            this.bajaDeIncidencia(numinc);
        }

        private eIncidencia buscarIncidencia(int num)
        {
            for (int i=0; i < this.Incidencias.Count; i++)
            {
                if (this.Incidencias.ElementAt(i).NumeroInc == num)
                    return this.Incidencias.ElementAt(i);
            }
            return null;
        }

        public bool modificarIncidencia(int numeroInc,
                                      DateTime fechaInc, string gravedad, string descrip, int prioridad,string estado)
        {
            eIncidencia inc = this.buscarIncidencia(numeroInc);
            if (inc == null)
            {
                return false;
            }
            else
            {
                inc.FechaInc = fechaInc;
                inc.Gravedad = gravedad;
                inc.Descrip = descrip;
                inc.Prioridad = prioridad;
                inc.Estado = estado;
                inc.modificarIncidencia(this.Codigo, numeroInc, fechaInc, gravedad, descrip, prioridad,estado);
            }

            return true;
        }


        public List<eIncidencia> traerIncidencias()
        {
            eIncidencia inc=new eIncidencia();
            return inc.obtenerIncidencias(this.Codigo);
        }*/
    }
}
